package edu.eam.tallermecanicoejb.beans;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import edu.eam.tallermecanicojpa.dao.RepuestoDAO;
import edu.eam.tallermecanicojpa.entidades.Repuesto;

/**
 * Session bean del repuesto
 */
@Stateless
@LocalBean
public class RepuestoBean {

	@PersistenceContext
	/**
	 * EntityManager para manejar las transacciones del repuesto con la base de
	 * datos
	 */
	private EntityManager entityManager;

	/* Data Acces Object del repuesto */
	private RepuestoDAO repuestoDAO;

	/* Constructor del repuestoBean vacio */
	public RepuestoBean() {
		super();
	}

	@PostConstruct
	/* Metodo para inicializar el RepuestoDAO */
	public void inicializarAutomovilDAO() {
		repuestoDAO = new RepuestoDAO(entityManager);
	}

	/**
	 * Metodo para persistir un repuesto en la base de datos
	 * 
	 * @param repuesto
	 *            Repuesto que se quiere persistir en la base de datos
	 */
	public void persistir(Repuesto repuesto) {
		repuestoDAO.persistir(repuesto);
	}

	/**
	 * Metodo para actualizar un repuesto en la base de datos
	 * 
	 * @param repuesto
	 *            Repuesto que se quiere actualizar en la base de datos
	 */
	public void actualizar(Repuesto repuesto) {
		repuestoDAO.actualizar(repuesto);
	}

	/**
	 * Metodo para recuperar un repuesto de la base de datos conociendo su
	 * numero de identificacion
	 * 
	 * @param id
	 *            Numero de identificacion del repuesto que se quiere recuperar
	 *            de la base de datos
	 * @return El repuesto que se encontro con el id o null si no se encontro
	 */
	public Repuesto recuperar(long id) throws Exception {
		return repuestoDAO.recuperar(id);
	}

	/**
	 * Metodo para eliminar un repuesto de la base de datos
	 * 
	 * @param repuesto
	 *            Repuesto que se quiere eliminar de la base de datos
	 */
	public void eliminar(Repuesto repuesto) {
		repuestoDAO.eliminar(repuesto);
	}

	/* Metodo para listar todas los repuestos del taller mecanico */
	public List<Repuesto> listar() {
		return repuestoDAO.listar();
	}

	/**
	 * Metodo para recuperar un repuesto y sus repuestosVisita conociendo su
	 * numero de identificacion
	 * 
	 * @param id
	 *            Numero de identificacion del repuesto que se quiere recuperar
	 *            de la base de datos
	 * @return El repuesto que se encontro con el id o null si no se encontro
	 */
	public Repuesto recuperarConRepuestos(long id) throws Exception {
		return repuestoDAO.recuperarConRepuestos(id);
	}

	/* Metodo para listar todas los repuestos con sus repuestosVisita */
	public List<Repuesto> listarConRepuestos() {
		return repuestoDAO.listarConRepuestos();
	}
}
